package Controllers;

import DB.*;
import Models.*;
import java.util.ArrayList;

public class SearchController<T extends DB.RowInterface>
{
	/**
	 * Udfører søgninger i kundetabellen
	 * @param searchText Søgetekst
	 * @return Resultat af søgning
	 */
	public ArrayList<Customer> searchCustomer(String searchText)
	{
		DBCustomer dbc = new DBCustomer();
		String[] columns = Customer.getSearchColumns();
		return dbc.fetchAll(createWhereClause(columns, searchText), "name ASC");
	}

	/**
	 * Udfører søgninger i lokationstabellen
	 * @param searchText Søgetekst
	 * @return Resultat af søgning
	 */
	public ArrayList<Location> searchLocation(String searchText)
	{
		DBLocation dbl = new DBLocation();
		String[] columns = Location.getSearchColumns();
		return dbl.fetchAll(createWhereClause(columns, searchText), "zipCode ASC");
	}

	/**
	 * Udfører søgninger i rutetabellen
	 * @param searchText Søgetekst
	 * @return Resultat af søgning
	 */
	public ArrayList<Route> searchRoute(String searchText)
	{
		DBRoute dbr = new DBRoute();
		String[] columns = Route.getSearchColumns();
		return dbr.fetchAll(createWhereClause(columns, searchText), "routeNo ASC");
	}

	/**
	 * Udfører søgninger i rundetabellen
	 * @param searchText Søgetekst
	 * @return Resultat af søgning
	 */
	public ArrayList<Round> searchRound(String searchText)
	{
		DBRound dbr = new DBRound();
		String[] columns = Round.getSearchColumns();
		return dbr.fetchAll(createWhereClause(columns, searchText), "locationNo ASC");
	}

	/**
	 * Udfører søgninger i ansattetabellen
	 * @param searchText Søgetekst
	 * @return Resultat af søgning
	 */
	public ArrayList<Employee> searchEmployee(String searchText)
	{
		DBEmployee dbr = new DBEmployee();
		String[] columns = Employee.getSearchColumns();
		return dbr.fetchAll(createWhereClause(columns, searchText), "name ASC");
	}

	/**
	 * Udfører søgninger i biltabellen
	 * @param searchText Søgetekst
	 * @return Resultat af søgning
	 */
	public ArrayList<Car> searchCar(String searchText)
	{
		DBCar dbr = new DBCar();
		String[] columns = Car.getSearchColumns();
		return dbr.fetchAll(createWhereClause(columns, searchText), "licensePlate ASC");
	}

	/**
	 * Udfører søgninger i vagtplantabellen
	 * @param searchText Søgetekst
	 * @return Resultat af søgning
	 */
	public ArrayList<Schedule> searchSchedule(String searchText)
	{
		DBSchedule dbr = new DBSchedule();
		String[] columns = Schedule.getSearchColumns();
		return dbr.fetchAll(createWhereClause(columns, searchText), "date ASC");
	}
	/**
	 * Bliver brugt af de overstående metoder til at gennemsøge kolonner i tabellen efter værdier som ligner(LIKE) søgeteksten
	 * @param columns En String liste af kolonner
	 * @param searchText Søgetekst
	 * @return En String som bliver brugt til søgning
	 */
	private String createWhereClause(String[] columns, String searchText)
	{
		if(searchText.equals("*") || searchText.equals(""))
		{
			return null;
		}
		else
		{
			String whereClause = "";
			int i = 1;
			for (String column : columns)
			{
				whereClause += column+" LIKE '%"+searchText+"%'";
				if(i != columns.length)
				{
					whereClause += " OR ";
				}
				i++;
			}
			return whereClause;
		}
	}
}
